package testes;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import logica.locacao.PlanoDeLocacao;
import logica.veiculo.Acessorio;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import util.Constantes;

public class TestaPlano {

    private PlanoDeLocacao plano1;
    private Map<String, HashSet<String>> mapaDeMarcas;
    private Set<String> modelosA;
    private Acessorio[] acessoriosInvalidos = {Acessorio.AB, Acessorio.VE, Acessorio.ABS, null, null, null, null, null, null, null, null};
      
    @SuppressWarnings("unchecked")
	@Before
    public void setUp() throws Exception {
    	plano1 = new PlanoDeLocacao();
    	mapaDeMarcas = new HashMap<String, HashSet<String>>();
    	    	
    	modelosA = new HashSet<String>();
    	
    	modelosA.add("MarcaA");
    	    	
    	mapaDeMarcas.put("MarcaA", (HashSet)modelosA);
    }
   
    @SuppressWarnings("unchecked")
	@Test
    public void testaSetsEGets(){
       
    	try{
    		plano1.setPrecoBaseDaDiaria(-10);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e){
    		Assert.assertEquals("\n \t <Preco base da diaria invalido!>",e.getMessage());
    	}
    	
    	try{
    		plano1.setPrecoBaseDaDiaria(0);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e){
    		Assert.assertEquals("\n \t <Preco base da diaria invalido!>",e.getMessage());
    	}
    	
    	try{
    		plano1.setTipoDeVeiculo(null);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e){
    		Assert.assertEquals("\n \t <Tipo de veiculo invalido!>",e.getMessage());
    	}
    	
    	try{
    		plano1.setCilindradas(-150);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e){
    		Assert.assertEquals("\n \t <Cilindrada invalida!>",e.getMessage());
    	}
    	
    	try{
    		plano1.setCilindradas(0);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e){
    		Assert.assertEquals("\n \t <Cilindrada invalida!>",e.getMessage());
    	}
    	
    	try{
    		plano1.setMarcasXModelos(null);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e){
    		Assert.assertEquals("\n \t <Mapa de marcas e modelos invalido!>",e.getMessage());
    	}
    	
    	try{
    		plano1.setMarcasXModelos((HashMap)mapaDeMarcas);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e) {
    		Assert.assertEquals("\n \t <Nao pode haver de forma alguma marcas e modelos iguais!>",e.getMessage());
    	}
    	
    	try{
    		plano1.setAcessorios(null);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e) {
    		Assert.assertEquals("\n \t <Lista de acessorios invalida ou com limite excedido! (limite de: "+Constantes.QTDE_ACESSORIOS_POR_PLANO+" acessorios por plano)!>", e.getMessage());
    	}
    	
    	try{
    		plano1.setAcessorios(acessoriosInvalidos);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e) {
    		Assert.assertEquals("\n \t <Lista de acessorios invalida ou com limite excedido! (limite de: " + Constantes.QTDE_ACESSORIOS_POR_PLANO + " acessorios por plano)!>", e.getMessage());
    	}
    	
    	try{
    		plano1.setPotencia(0);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e) {
    		Assert.assertEquals("\n \t <Potencia invalida!>", e.getMessage());
    	}
    	
    	try{
    		plano1.setPotencia(-250);
    		Assert.fail("Nao deveria ter entrado aqui.");
    	}
    	catch (Exception e) {
    		Assert.assertEquals("\n \t <Potencia invalida!>", e.getMessage());
    	}  	
    }
}